import type { IStudent, IStudentCreateRequest, IStudentUpdateRequest } from '../student';

/**
 * 学生卡片组件属性
 */
export interface IStudentCardProps {
  /** 学生信息 */
  student: IStudent;
  /** 编辑回调 */
  onEdit?: (id: string) => void;
  /** 删除回调 */
  onDelete?: (id: string) => void;
  /** 查看课表回调 */
  onViewSchedule?: (id: string) => void;
  /** 自定义样式类名 */
  className?: string;
  /** 是否显示操作按钮 */
  showActions?: boolean;
  /** 是否可选择 */
  selectable?: boolean;
  /** 是否已选中 */
  selected?: boolean;
  /** 选择回调 */
  onSelect?: (id: string, selected: boolean) => void;
}

/**
 * 学生表单组件属性
 */
export interface IStudentFormProps {
  /** 学生信息（编辑时传入） */
  student?: IStudent;
  /** 是否显示表单 */
  visible: boolean;
  /** 表单模式 */
  mode: 'create' | 'edit';
  /** 提交回调 */
  onSubmit: (data: IStudentCreateRequest | IStudentUpdateRequest) => Promise<void>;
  /** 取消回调 */
  onCancel: () => void;
  /** 是否加载中 */
  loading?: boolean;
}

/**
 * 学生列表组件属性
 */
export interface IStudentListProps {
  /** 学生列表 */
  students: IStudent[];
  /** 是否加载中 */
  loading?: boolean;
  /** 编辑回调 */
  onEdit?: (student: IStudent) => void;
  /** 删除回调 */
  onDelete?: (id: string) => void;
  /** 查看课表回调 */
  onViewSchedule?: (id: string) => void;
  /** 选择学生回调 */
  onSelect?: (studentIds: string[]) => void;
  /** 已选中的学生ID列表 */
  selectedStudentIds?: string[];
  /** 是否显示选择框 */
  selectable?: boolean;
  /** 自定义样式类名 */
  className?: string;
  /** 空状态文本 */
  emptyText?: string;
}

/**
 * 学生搜索组件属性
 */
export interface IStudentSearchProps {
  /** 搜索关键词 */
  keyword?: string;
  /** 搜索回调 */
  onSearch: (keyword: string) => void;
  /** 筛选条件 */
  filters?: {
    /** 年级筛选 */
    grade?: string;
    /** 班级筛选 */
    class?: string;
    /** 状态筛选 */
    status?: number;
  };
  /** 筛选回调 */
  onFilterChange?: (filters: IStudentSearchProps['filters']) => void;
  /** 重置回调 */
  onReset?: () => void;
  /** 自定义样式类名 */
  className?: string;
  /** 占位符文本 */
  placeholder?: string;
  /** 是否显示高级筛选 */
  showAdvancedFilter?: boolean;
}

/**
 * 学生选择器组件属性
 */
export interface IStudentSelectorProps {
  /** 学生列表 */
  students: IStudent[];
  /** 已选中的学生ID列表 */
  selectedStudentIds: string[];
  /** 选择回调 */
  onChange: (studentIds: string[]) => void;
  /** 是否多选 */
  multiple?: boolean;
  /** 占位符文本 */
  placeholder?: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 自定义样式类名 */
  className?: string;
  /** 最大选择数量 */
  maxCount?: number;
}